#ifndef __MODELO_H_
#define __MODELO_H_

#include <vector>
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <cstring>
#include <sstream>
#include "Primitiva.h"
#include "Linea.h"
#include "Punto.h"
#include "Rectangulo.h"
#include "Circulo.h"
#include "Triangulo.h"
#include "Conjunto.h"
#include "Imagen.h"

using namespace std;

class Vista;

class Modelo
{
    friend class Vista;
public:
    Modelo()    { };
    Modelo (const Modelo& ) { };
    ~Modelo() { for(int i = 0; i < (signed)figuras.size(); i++) delete figuras[i]; figuras.clear(); };

    Modelo& operator=(const Modelo& );

    void ActualizarVistas();
    void guardarAFichero(vector<Primitiva*>, string file = "figuras.txt");
    string guardarAFichero(vector<Primitiva*>, bool conj);
    void cargarFichero(string f = "figuras.txt");
    void vaciarFiguras();

    vector<Primitiva*> figuras;
    vector<Primitiva*> figurasSeleccionadas;
    vector<Primitiva*> portapapeles;
    
protected:
    vector<Vista*> vistas;

    void AddVista(Vista* v) { vistas.push_back(v); };
};

#endif // __MODELO_H_
